home *** CD-ROM | disk | FTP | other *** search
/ The Best of MacTutor - S…e Code for Volumes 1 to 5 / The Best of MacTutor - Source Code for Volume 1-5 (Wayzata Technology)(6031)(1990).bin / Source Code / #18 (Mar 87) / Printer LSP sources / StringFormatStuff < prev    next >
Text File  |  1987-02-13  |  2KB  |  94 lines

  1. UNIT StringFormat;
  2.  
  3. {    WHAT:    Definition of string formatting library}
  4. {    WHO:    Joel West, Western Software Technology}
  5.  
  6. INTERFACE
  7.  
  8.     PROCEDURE SWrite (VAR s : Str255;
  9.                                     c : CHAR);
  10.     PROCEDURE SWriteHex (VAR s : Str255;
  11.                                     n : LongInt;
  12.                                     w : INTEGER);
  13.     PROCEDURE SWriteInt (VAR s : Str255;
  14.                                     n : LongInt;
  15.                                     w : INTEGER);
  16.     PROCEDURE SWriteString (VAR s : Str255;
  17.                                     s2 : Str255);
  18.  
  19. IMPLEMENTATION
  20.  
  21. {    WHAT:    Implementation of UNIT StringWrite}
  22. {    WHO:    Joel West, Western Software Technology}
  23. {    WHEN:    November 1986}
  24. {    HOW:    Formatted output to Pascal strings.  Names match}
  25. {        Modula-2 InOut module.  Developed to replace —}
  26. {        albeit awkwardly — use of C sprintf.}
  27.  
  28. { As with all the Pascal equivalents, output the specified field width}
  29. {  or the minimum necessary number of digits, whichever is greater.}
  30.  
  31. {   format a character    }
  32.     PROCEDURE SWrite; {(var s : Str255;c : CHAR);}
  33.         VAR
  34.             i : INTEGER;
  35.     BEGIN
  36.         i := length(s) + 1;
  37.         IF i < 255 THEN
  38.             insert(c, s, i);
  39.     END; (* SWrite *)
  40.  
  41. {    format a number in hex    }
  42.     PROCEDURE SWriteHex;{(var s : Str255;n : LongInt;w : INTEGER);}
  43.         VAR
  44.             d, i : INTEGER;
  45.             s2 : Str255;
  46.     BEGIN
  47.         s2 := '';
  48.         FOR i := 1 TO w DO
  49.             s2 := concat(s2, ' ');
  50.         WHILE w > 0 DO
  51.             BEGIN
  52.                 d := BitAnd(n, $0F);
  53.                 n := BitShift(n, -4); {right shift}
  54.  
  55.                 IF d < 10 THEN
  56.                     IF w < 255 THEN
  57.                         BEGIN
  58.                             delete(s2, w, 1);
  59.                             insert(CHR(ORD('0') + d), s2, w)
  60.                         END
  61.                     ELSE IF w < 255 THEN
  62.                         BEGIN
  63.                             delete(s2, w, 1);
  64.                             insert(CHR(ORD('A') - 10 + d), s2, w);
  65.                         END;
  66.  
  67.                 w := w - 1;
  68.             END;
  69.         SWriteString(s, s2);
  70.     END; (* SWriteHex *)
  71.  
  72. {     format a number in decimal    }
  73.     PROCEDURE SWriteInt; {(var s : Str255;n : LongInt;w : INTEGER);}
  74.         VAR
  75.             i : INTEGER;
  76.             s2 : Str255;
  77.     BEGIN
  78.         NumToString(n, s2);
  79.         i := w - Length(s2);
  80.         WHILE i > 0 DO
  81.             BEGIN
  82.                 SWrite(s, ' ');    (* Leading spaces *)
  83.                 i := i - 1;
  84.             END;
  85.         SWriteString(s, s2);
  86.     END; (* SWriteInt *)
  87.  
  88. {    format a character string    }
  89.     PROCEDURE SWriteString; {(var s : Str255; s2 : Str255);}
  90.     BEGIN
  91.         s := Concat(s, s2);
  92.     END; (* SWriteString *)
  93.  
  94. END.